package com.isoft.c2team3service2.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.isoft.c2team3service2.entity.Permission;
import com.isoft.c2team3service2.entity.Role;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface RoleMapper extends BaseMapper<Role> {

//    @Select("SELECT r.id, r.name FROM role r,tb_login l ,tb_person p WHERE r.id = l.role_id and  l.role_id=p.role_id")
//    List<Role> getRolesByUserId(Integer userId);
    /**
     * 1. 根据用户ID查询角色列表（用于登录时获取用户角色）
     * 关联：tb_login → user_role → role
     */
    @Select("SELECT r.id, r.name FROM role r JOIN user_role ur ON r.id = ur.role_id WHERE ur.user_id = #{userId}")
    List<Role> getRolesByUserId(@Param("userId") Integer userId);
//
//    /**
//     * 2. 根据角色ID查询权限列表（用于权限校验）
//     * 关联：role → role_permission → permission
//     */
//    @Select("SELECT p.id, p.name, p.code, p.description " +
//            "FROM permission p " +
//            "JOIN role_permission rp ON p.id = rp.permission_id " +
//            "WHERE rp.role_id = #{roleId}")
//    List<Permission> getPermissionsByRoleId(@Param("roleId") Integer roleId);
//
//    /**
//     * 3. 根据用户ID查询所有权限（直接获取用户拥有的权限，用于接口权限控制）
//     * 关联：tb_login → user_role → role → role_permission → permission
//     */
//    @Select("SELECT DISTINCT p.id, p.name, p.code, p.description " +
//            "FROM permission p " +
//            "JOIN role_permission rp ON p.id = rp.permission_id " +
//            "JOIN role r ON rp.role_id = r.id " +
//            "JOIN user_role ur ON r.id = ur.role_id " +
//            "WHERE ur.user_id = #{userId}")
//    List<Permission> getPermissionsByUserId(@Param("userId") Integer userId);
//
//    /**
//     * 4. 查询所有角色（用于角色管理功能）
//     */
//    @Select("SELECT id, name, description FROM role")
//    List<Role> getAllRoles();
//
//    /**
//     * 5. 检查用户是否拥有某个权限（用于快速权限校验）
//     * @param userId 用户ID
//     * @param permissionCode 权限标识（如：private_post:query）
//     */
//    @Select("SELECT COUNT(*) " +
//            "FROM permission p " +
//            "JOIN role_permission rp ON p.id = rp.permission_id " +
//            "JOIN role r ON rp.role_id = r.id " +
//            "JOIN user_role ur ON r.id = ur.role_id " +
//            "WHERE ur.user_id = #{userId} " +
//            "AND p.code = #{permissionCode}")
//    int checkPermission(@Param("userId") Integer userId, @Param("permissionCode") String permissionCode);
}